let chessBoard = [];
let me = true; //玩家落子,黑子
let over = false; //游戏结束

//赢法数组
let wins = [];

//赢法的统计数组
let myWin = [];
let computerWin = [];

for (let i = 0; i < 15; i++) {
    chessBoard[i] = [];
    for (let j = 0; j < 15; j++) {
        chessBoard[i][j] = 0;
    }
}

for (let i = 0; i < 15; i++) {
    wins[i] = [];
    for (let j = 0; j < 15; j++) {
        wins[i][j] = [];
    }
}

let count = 0;
// 竖线赢法
for (let i = 0; i < 15; i++) {
    for (let j = 0; j < 11; j++) {
        // wins[0][0][0] = true
        // wins[0][1][0] = true
        // wins[0][2][0] = true
        // wins[0][3][0] = true
        // wins[0][4][0] = true

        // wins[0][1][1] = true
        // wins[0][2][1] = true
        // wins[0][3][1] = true
        // wins[0][4][1] = true
        // wins[0][5][1] = true
        for (let k = 0; k < 5; k++) {
            wins[i][j + k][count] = true;
        }
        count++;
    }
}
// 横线赢法
for (let i = 0; i < 15; i++) {
    for (let j = 0; j < 11; j++) {
        for (let k = 0; k < 5; k++) {
            wins[j + k][i][count] = true;
        }
        count++;
    }
}
// 斜线赢法
for (let i = 0; i < 11; i++) {
    for (let j = 0; j < 11; j++) {
        for (let k = 0; k < 5; k++) {
            wins[i + k][j + k][count] = true;
        }
        count++;
    }
}
// 反斜线赢法
for (let i = 0; i < 11; i++) {
    for (let j = 14; j > 3; j--) {
        for (let k = 0; k < 5; k++) {
            wins[i + k][j - k][count] = true;
        }
        count++;
    }
}

console.log(count);

for (let i = 0; i < count; i++) {
    myWin[i] = 0;
    computerWin[i] = 0;
}

let chess = document.getElementById('chess');
let context = chess.getContext('2d');

context.strokeStyle = "#B9A38A";

// let logo = new Image();
// logo.src = "images/bg-repeat.png";
// logo.onload = function(){
// 	// context.drawImage(logo, 0, 0, 450, 450);
// }

let drawChessBoard = function () {
    for (let i = 0; i < 15; i++) {
        context.moveTo(15 + i * 30, 15);
        context.lineTo(15 + i * 30, 435);
        context.stroke();
        context.moveTo(15, 15 + i * 30);
        context.lineTo(435, 15 + i * 30);
        context.stroke();
    }
}

drawChessBoard();

let oneStep = function (i, j, me) {
    context.beginPath();
    context.arc(15 + i * 30, 15 + j * 30, 13, 0, 2 * Math.PI);
    context.closePath();
    let gradient = context.createRadialGradient(15 + i * 30 - 2, 15 + j * 30 - 2, 13, 15 + i * 30 - 2, 15 + j * 30 - 2, 4);
    if (me) {
        gradient.addColorStop(0, "#0a0a0a");
        gradient.addColorStop(1, "#636766");
    } else {
        gradient.addColorStop(0, "#a6a6a6");
        gradient.addColorStop(1, "#f9f9f9");
    }
    context.fillStyle = gradient;
    context.fill();
}

chess.onclick = function (e) {
    if (over) {
        return;
    }
    if (!me) {
        return;
    }
    let x = e.offsetX;
    let y = e.offsetY;
    let i = Math.floor(x / 30);
    let j = Math.floor(y / 30);
    if (chessBoard[i][j] == 0) {
        oneStep(i, j, me);
        chessBoard[i][j] = 1;
        for (let k = 0; k < count; k++) {
            if (wins[i][j][k]) {
                myWin[k]++;
                computerWin[k] = 6;
                if (myWin[k] == 5) {
                    window.alert("你赢了");
                    over = true;
                }
            }
        }
        if (!over) {
            me = !me;
            console.log(chessBoard)
            computerAI();
        }
    }
}

let computerAI = function () {
    let myScore = [];
    let computerScore = [];
    let max = 0;//最高分
    let u = 0, v = 0; //最高分坐标
    for (let i = 0; i < 15; i++) {
        myScore[i] = [];
        computerScore[i] = [];
        for (let j = 0; j < 15; j++) {
            myScore[i][j] = 0;
            computerScore[i][j] = 0;
        }
    }
    for (let i = 0; i < 15; i++) {
        for (let j = 0; j < 15; j++) {
            if (chessBoard[i][j] == 0) {
                for (let k = 0; k < count; k++) {
                    if (wins[i][j][k]) {
                        if (myWin[k] == 1) {
                            myScore[i][j] += 200;
                            console.log(i, j, 200);
                        } else if (myWin[k] == 2) {
                            myScore[i][j] += 400;
                            console.log(i, j, 400);
                        } else if (myWin[k] == 3) {
                            myScore[i][j] += 2000;
                            console.log(i, j, 3000);
                        } else if (myWin[k] == 4) {
                            myScore[i][j] += 10000;
                            console.log(i, j, 20000);
                        }
                        if (computerWin[k] == 1) {
                            computerScore[i][j] += 220;
                        } else if (computerWin[k] == 2) {
                            computerScore[i][j] += 420;
                        } else if (computerWin[k] == 3) {
                            computerScore[i][j] += 3100;
                        } else if (computerWin[k] == 4) {
                            computerScore[i][j] += 22000;
                        }
                    }
                }
                if (myScore[i][j] > max) {
                    max = myScore[i][j];
                    u = i;
                    v = j;
                } else if (myScore[i][j] == max) {
                    if (computerScore[i][j] > computerScore[u][v] || Math.floor(Math.random() * 2)) {
                        u = i;
                        v = j;
                    }
                }
                if (computerScore[i][j] > max) {
                    max = computerScore[i][j];
                    u = i;
                    v = j;
                } else if (computerScore[i][j] == max) {
                    if (myScore[i][j] > myScore[u][v] || Math.floor(Math.random() * 2)) {
                        u = i;
                        v = j;
                    }
                }
            }
        }
    }
    oneStep(u, v, false);
    chessBoard[u][v] = 2;
    test(u, v, max);
    // console.log("computerScore",computerScore);
    // console.log("myScore",myScore);
    for (let k = 0; k < count; k++) {
        if (wins[u][v][k]) {
            computerWin[k]++;
            myWin[k] = 6;
            if (computerWin[k] == 5) {
                window.alert("计算机赢了");
                over = true;
            }
        }
    }
    if (!over) {
        me = !me;
    }
}

let test = function (x, y, score) {
    let t = document.getElementById("test");
    let tx = document.getElementById("x");
    let ty = document.getElementById("y");
    let tscore = document.getElementById("score");
    tx.innerHTML = x + 1;
    ty.innerHTML = y + 1;
    tscore.innerHTML = score;
}

document.getElementById("reset").onclick = function () {
    window.self.location.href = window.self.location.href;
}
